//当我们在编写代码的时候，在执行ts编译阶段会报错

//可选类型msg？：string ==>undefined | string
function fn(msg?:string){
    //因为传入的msg有可能是为undefined的，这个时候是不能执行uppercase方法
    //error：Object is possibly 'undefined'.
    console.log(msg!.toUpperCase());
}

//但是，此时我们可以确定我们传入的参数有值的，这个时候就可以使用非空类型断言
//非空断言 使用的！，表示可以确定某个标识（变量）是有值的，可以跳过ts在编译阶段对他的检测
fn('hello')

//vue2 ==> Object.defineProperty()
//缺点 let obj = { name: "123" obj2:{ name:"456"}}
//  obj.obj2.aa = "xxxx"
// vue3 ==>  Object.proxy()


// vue3源码
/*var a = new Proxy()
a!.xxx*/